package cn.edu.wdu.gaojie.reflection.other;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @author gaojie  gao4433@qq.com
 * @Description
 * @date 2021/11/29 14:47
 * @since 1.8
 */
public class AnimalRef {
    public static void main(String[] args) throws Exception {
        Class<?> A = Class.forName("cn.edu.wdu.gaojie.reflection.other.Animal");
        Object o = A.newInstance();

        // getDeclaredFields ：通过类对象获取该类下所有的字段
        Field[] fields = A.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            // getType ：获取某个字段的类型，得到的是该类型的类对象
            Class<?> type = field.getType();
            if (type.toString().endsWith("String")) {
                // 说明该字段是字符串
                field.set(o, "Timor");
            } else if (type.toString().endsWith("Integer")) {
                // 说明该字段是整数
                field.set(o, 2);
            } else if (type.toString().endsWith("Double")) {
                // 说明该字段是小数
                field.set(o, 3.14);
            }
        }

        Method say = A.getDeclaredMethod("say");
        say.invoke(o);

    }
}
